package org.axway.grapes.server.webapp.tasks.migrate;
import com.google.common.collect.ImmutableMultimap;
import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
import com.yammer.dropwizard.tasks.Task;
import org.axway.grapes.server.config.DataBaseConfig;
import org.axway.grapes.server.db.datamodel.DbCollections;
import org.axway.grapes.server.db.datamodel.DbGrapesInfo;
import org.jongo.Jongo;
import java.io.PrintWriter;
public class MigrationTask extends Task{
private final DataBaseConfig config;
private MongoClient mongo;
public MigrationTask(final DataBaseConfig configuration) {
super("migrate");
this.config = configuration;
}
@Override
public void execute(final ImmutableMultimap<String, String> stringStringImmutableMultimap, final PrintWriter printWriter) throws Exception {
final Jongo db = initDBConnection();
final DbGrapesInfo info = db.getCollection(DbCollections.DB_GRAPES_INFO).findOne().as(DbGrapesInfo.class);
if(info == null){
Migration220.perform(db, printWriter);
return;
}
mongo.close();
printWriter.println("Your database is up-to-date.");
printWriter.flush();
}
private Jongo initDBConnection() throws Exception {
final ServerAddress address = new ServerAddress(config.getHost() , config.getPort());
mongo = new MongoClient(address);
final DB db = mongo.getDB(config.getDatastore());
if(config.getUser() != null && config.getPwd() != null){
db.authenticate(config.getUser(), config.getPwd());
}
return new Jongo(db);
}
}